#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>


//实现这样一个功能：将2号信号屏蔽，产生2号信号，查看pending表情况
//一段时间后，不再屏蔽2号信号，查看pending表状态
void Handler(int signo)
{
    std::cout << "2号信号被递达了" << std::endl;
}
void PrintPending(sigset_t& pending) //传入型参数
{
    std::cout << "当前进程" << getpid() << "的pending图为:";
    for(int i = 31;i >= 1;i--)
    {
        if(sigismember(&pending,i))
        {
            std::cout << '1';
        }
        else
            std::cout << '0';
    }
    std::cout << std::endl;
}
int main()
{
    signal(SIGINT,Handler);
    sigset_t block,pending;
    sigemptyset(&block);
    sigemptyset(&pending);
    sigaddset(&block,SIGINT);//设置2号信号的屏蔽
    sigprocmask(SIG_SETMASK,&block,nullptr);
    int cnt = 5;
    while(1)
    {
        sigpending(&pending);//获取内核pending表状态
        PrintPending(pending);
        cnt--;
        // std::cout << ' ' << cnt;
        if(cnt == 0)
            sigprocmask(SIG_UNBLOCK,&block,nullptr);
        sleep(1);
    }
    return 0;
}